This page describes Math.h++ fromm a more technical perspective. From here you can also access:
the Rogue Wave Math.h++ library grew out of the Data Analysis and Interactive Modeling System (DAIMS) project at the University of Washington, led by Dr. Thomas Keffer. The goal of DAIMS was to bring high-level object-oriented interactive tools to the numerical modeler and data analyst. Because these were large models, efficiency and maintainability were of paramount importance, leading to the adoption of C++ by the project in 1987.
Math.h++ was created to develop interactive models and analysis tools and has been used by a wide variety of users in many of academic and commercial settings on projects ranging from financial modeling to computer graphics and animation to oceanic mixed-layer models. It is the first commercially available C++ class library.
Math.h++ is a C++ class library that combines power and ease of use in a set of classes designed to improve the performance and reliability of any code which manipulates arrays of numbers. Its innovative class structure makes working with three dimensional arrays of integers as easy as using built in types such as double, yet its inlined assembly language basic linear algebra subprograms make your code faster than C or Fortran! All the basic types you need for numerical programming are included: vectors, matrices, arrays, random numbers, FFTs, and much, much more!
Math.h++ increases your productivity and improves the readability, maintainability, and reliability of your code by allowing you to program at a higher level of abstraction. Rather than worry about low level concepts like memory allocation, reference counting, pointer aliasing, and dope vectors, you write code directly in terms of higher level concepts such as 3-D arrays, vectors, factorizations, and histograms. the details and the error checking are handled by our classes rather than by you. Our integrated set of vector, matrix and array types, together with the Math.h++ advanced subscripting types, combine to make cumbersome for loops over arrays a thing of the past. Math.h++ makes it easy to do your initial development on a PC and then later scale up to a UNIX Workstation or even a super computer. Our powerful data-view paradigm allows you to access any plane of a three (or more) dimensional array and treat it as a matrix. Details of dimension sizes and dope vectors are completely encapsulated. The Math.h++ linear algebra classes can be used to solve systems of equations efficiently without requiring you to keep track of, or even know about, details of the underlying LU decomposition. By using our FFT server objects, you don't need to precompute work arrays explicitly before the computation.
We have avoided using esoteric operators like "&=" and have tried hard to make all the familiar operators work just as you might expect - there are no surprises. this approach gives great symmetry to Math.h++, making it possible, for example, to use C++ templates to write functions and classes that work with matrices of any type.
Math.h++ works together with other Rogue Wave products. All objects are fully persistent using the RWFile and virtual streams classes from Rogue Wave's Tools.h++. Math.h++ can, of course, be used on UNIX, MS-DOS, Windows, OS/2 and by a wide variety of C++ compilers, including Borland C++, Microsoft C++, and AT & T cfront derived compilers. Also available from Cray for Cray C++ compilers.
Our goal has been to make Math.h++ as fast as hand-crafted C or Fortran. We've succeeded! Computationally intense procedures are based on the basic linear algebra subprograms (BLAS); by using BLAS custom built for your hardware, you can achieve optimal efficiency. On 80x86 based machines, we provide carefully written assembly language BLAS which are faster than C or Fortran.
A Powerful, Complete Set of Numerical Classes
A fully integrated set of classes for 1-dimensional arrays (vectors), 2-D arrays (matrices), 3-D, 4-D and even n-dimensional arrays. Each vector, matrix and array type is available in double complex, double, float, int, and char precision. All of the standard C++ operators are overloaded to work with vectors, matrices, and arrays. All types can be dynamically resized. Many member and global functions are supplied: copy, resize, abs, mean, sin, acos, etc.
All vector, matrix, and array classes can be subscripted with either integers, character strings (eg. "3 : 5" to get elements 3, 4, 5), or one of the subscripting classes: RWRange, RWSlice, RWToEnd, RWAll. For matrices and arrays, any of the subscript types can be used for any dimension, thus A (4, "2 : 3", RWAll) returns part of a plane of 3-dimensional array. Subscripting returns an appropriate vector, matrix, or array type which references the old data for maximum simplicity, efficiency, power, and flexibility. The data-view architecture makes helper classes and data copying unnecessary.
Optional bounds checking is provided for all subscripting operations. Bounds checking can be turned on for debugging, and then easily turned off for maximum efficiency.
LU decomposition classes: solution of linear systems of equations, determinants, condition numbers, matrix inversion. Algorithms used are from the well known Fortran Linpack library.
FFTs for complex and real transforms, one and two dimensional. Cosine transforms.
Use our random number classes to create independent random number generators from uniform, normal, exponential, gamma, poisson, or binomial distributions.
Histograms, linear regressions, basic statistics functions.
Math.h++ uses your compiler's built in complex class, or, if your compiler has no complex class, it uses a Rogue Wave supplied class.
Includes Tools.h++ RWFile and virtual streams classes. Math.h++ vectors, matrices, and arrays use these classes for highly flexible I/O. Also includes I/O for standard C++ iostreams.